Digital circuits in many cases contain various function blocks which operate in different time domains and interchange data with one another. In this case, the different function blocks are clocked by clock signals at different clock frequencies. If the logic function blocks are supplied with different clock signals as time reference, it is necessary to ensure that data signals which are transmitted from one function block to the other function block are not misinterpreted.
There may be different reasons for providing various, uncorrelated time domains on a chip. The signal distribution of the clock signal over the entire chip is not possible in many applications, since the clock frequency is too high. The random phase difference between the various clock signals may have a high level of variability in comparison with the frequency. A further possibility is for the clock signal to be generated from an external datastream.
Among the totally uncorrelated clock signals, there are also instances of correlated clock signals with variable correlation. Variable correlation is typical of the dynamic frequency scaling of partial circuit units. It is possible to read about various options which can be presented by a plurality of different time domains in G. Semeraro, G. Magklis, R. Balasubramonian, D. H. Albonesi, S. Dwarkadas and M. L. Scott, “Energy-Efficient Processor Design Using Multiple Clock Domains with Dynamic Voltage and Frequency Scaling”, 8th International Symposium on High-Performance Computer Architecture, pp. 29–40, February 2002, for example.
The data signals which are transmitted between function blocks in different time domains cannot be sampled by conventional registers, since the register's setup time may be infringed by the data signal received, in which case the register is put into a “metastable” state. In this case, the phase difference between the two time domains is unknown. The reason for this may either be that the variance in the signal is too great or that the inaccuracy of the result value is too high. A metastable register generates an inadmissible data output value, since the output voltage remains in a mid-range between the supply voltage and the ground voltage. This inadmissible output value may result in inadmissible data values in further gates and hence in a malfunction by other devices on the entire chip.
For this reason, specially designed registers, “synchronizers”, have been proposed which reduce the probability of a metastable state arising. Such synchronizers essentially comprise two cascaded, edge-triggered flipflops. A single-staged synchronization register has too great a mean time between failures (MTBF) in any case. For many applications, it is possible to use a synchronization register with two cascaded, edge-triggered flipflops, since the mean time between failures MTBF can be regarded as adequate. At very high clock frequencies, use is sometimes made of two cascaded, edge-triggered flipflops to achieve a sufficiently high mean time between failures MTBF. The more independent synchronization registers there are, the shorter the joint mean time between failures MTBF. The provision of such synchronization registers is a constant source of uncertainty in the circuit design.
To overcome the uncertainties in the data transfer between function blocks in different time domains, various technical proposals have been set forth which can be divided into two main groups, namely “handshake techniques” and queue techniques.
FIG. 1 shows an example of data transfer using queues. This circuit uses an FIFO register to transfer data between function blocks in different time domains. The FIFO register comprises a large number of storage registers Ri. The FIFO register is clocked by a first clock signal Φ1 and with a second clock signal Φ2. The data are written to the FIFO register at the clock frequency of the first clock signal Φ1 and are read from the FIFO register at the clock frequency of the second clock signal Φ2. In the example illustrated, the data which have been written come from various data channels Ki which are selected by a channel controller using a multiplexer. The channel controller also actuates a demultiplexer on the output side of the FIFO register for the purpose of further data transmission via various data channels Ki. A Full indicator flag indicates to a function block in the first time domain that the FIFO register is full, and an Empty indicator flag indicates to a function block in the second time domain that the FIFO register is empty.
If data are to be transmitted from the data channel Ki in the first time domain to every data channel Ki in the second time domain, “head-of-line blocking” may occur. In this case, the queue is blocked by a channel if the corresponding output channel is not ready.
A further approach to solving the synchronization problem between function blocks in different time domains is a handshake implementation. An example of such a handshake implementation is described in U.S. Pat. No. 5,291,529.
FIG. 2 shows the principle of a handshake implementation between two function blocks with synchronous logic which operate in different time domains. The “master” is clocked using a first clock signal Φ1, and a slave unit is clocked using a second clock signal Φ2. The clock frequencies of the two clock signals are different in this case. To transmit data, the master circuit unit sends a request signal to the slave unit. The slave unit detects the request signal and performs the request. The slave unit then indicates that the task has been performed to the master unit by returning an acknowledgement signal to the master unit. Since, as in the example illustrated, the master unit and the slave unit do not have a common time base, i.e. they are clocked by clock signals at different clock frequencies, it is a fundamental matter to ensure that the data signals which are interchanged between the master unit and the slave unit are not misinterpreted on account of metastable states.
Particularly transferring data from a function block which is clocked at a high clock frequency to a function block which is clocked at a lower clock frequency is critical and can be achieved only in complex fashion using conventional circuitry. The particular problem with a conventional handshake implementation is that the function block which is clocked by the slow clock signal reacts too late to a request from a function block which is clocked by a clock signal at a higher clock frequency.